package top.goldenyear.porpoise.common.core.util.collection;

import cn.hutool.v7.core.collection.CollUtil;
import cn.hutool.v7.core.map.MapUtil;
import cn.hutool.v7.core.map.TableMap;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;

/**
 * Map 工具类
 *
 * @author Airhead
 */
public class MapUtils extends MapUtil {

  /**
   * 从哈希表表中，获得 keys 对应的所有 value 数组
   *
   * @param multimap 哈希表
   * @param keys     keys
   * @return value 数组
   */
  public static <K, V> List<V> getList(TableMap<K, List<V>> multimap, Collection<K> keys) {
    List<V> result = new ArrayList<>();
    keys.forEach(
        k -> {
          List<V> list = multimap.get(k);
          if (CollUtil.isEmpty(list)) {
            return;
          }
          result.addAll(list);
        });

    return result;
  }

  /**
   * 从哈希表查找到 key 对应的 value，然后进一步处理 注意，如果查找到的 value 为 null 时，不进行处理
   *
   * @param map      哈希表
   * @param key      key
   * @param consumer 进一步处理的逻辑
   */
  public static <K, V> void findAndThen(Map<K, V> map, K key, Consumer<V> consumer) {
    if (CollUtil.isEmpty(map)) {
      return;
    }
    V value = map.get(key);
    if (value == null) {
      return;
    }
    consumer.accept(value);
  }
}
